#include <stdio.h>
#include <time.h>
#include <stdlib.h>

//函数声明(如果不声明，main函数中调用时会不识别此函数，就得必须把函数定义放在main函数之前)
void getTime(long *t);
double getAvg(int *arr, int size);
int * getRandom();

int main(){
    //指针函数
    long sec;
    getTime(&sec);
    printf("指针函数返回：%ld\n", sec);

    //指针函数，能接受数组传入，真是惊讶，就像使用数组一样
    //详见：https://www.runoob.com/cprogramming/c-passing-pointers-to-functions.html
    int arr[3] = {10, 20, 30};
    int size = 3;
    int avg;
    avg = getAvg(arr, size);
    printf("平均值为：%d\n", avg);

    //从函数返回指针(数组)，其实该指针指向的就是数组的第一个元素
    //实例：生成一个随机数数组
    int *p;
    p = getRandom();
    for (int i = 0; i < 10; i++){
        printf("result:[%d] = %d\n", i, *(p + i));
    }
    return 0;
}

//函数定义
void getTime(long *t){
    *t = time(NULL);
    return;
}

double getAvg(int *arr, int size){
    int sum = 0;
    for (int i = 0; i < size; i++){
        sum += arr[i];
    }
    return (double)sum/size;
}

int * getRandom(){
    static int r[10];//这里有个问题，就是如果不定义static，r变量就是局部变量，局部变量存放在内存的栈区，函数结束后就会被释放，自然返回的值是错误的。只有定义为全局变量，放堆。

    //设置种子
    srand((unsigned)time(NULL));

    for (int i = 0; i < 10; i++){
        r[i] = rand();
        printf("r[%d]=%d\n", i, r[i]);
    }

    return r;
}
